Go switch vs if-else效率
全部标签 我是Python的新手,目前正在使用Python2。我有一些源文件,每个文件都包含大量数据(大约1900万行)。它看起来像下面这样:apple\tN\tapplen&aposgarden\tN\tgardenb\ta\mdgreat\tAdj\tgreatnice\tAdj\t(unknown)etc我的任务是在每个文件的第3列中搜索一些目标词,每次在语料库中找到一个目标词,就必须将这个词前后的10个词添加到多维词典中。编辑:应排除包含“&”、“\”或字符串“(unknown)”的行。我尝试使用readlines()和enumerate()来解决这个问题,如下面的代码所示。代码做了它应
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。总有人说Python效率不如C/C++、Java等其他语言,而且瓶颈部分也建议用C写。不过我没遇到过这样的问题,可能是因为大多数时候是你解决问题的方式而不是语言的效率来打扰。任何人都可以说明任何真实情况吗?一些简单的代码会很棒。
我的目标是创建一种非常简单的模板语言。目前,我正在努力用一个值替换一个变量,如下所示:这个输入:TheWeb应该产生这个输出:TheWebThisIsATestVariable我已经开始工作了。但是看看我的代码,我在相同的字符串上运行多个相同的正则表达式——这只会冒犯我的效率意识。必须有更好、更Pythonic的方式。(真正令人反感的是两个“while”循环。)这确实通过了单元测试,所以如果这是愚蠢的过早优化,请告诉我——我愿意放弃它。一个文档中可能有几十个这样的变量定义和使用,但不会有数百个。但我怀疑(对其他人而言)有明显的改进方法,我很好奇StackOverflow的人群会想出什么
我是Python的忠实粉丝for...elsesyntax-它的适用频率以及简化代码的效率令人惊讶。但是,我还没有找到在生成器中使用它的好方法,例如:defiterate(i):forvalueini:yieldvalueelse:print'iisempty'在上面的示例中,我希望仅当i为空时才执行print语句。但是,由于else只考虑break和return,所以无论i的长度如何,它都会被执行。如果无法以这种方式使用for...else,那么最好的方法是什么,以便仅在没有生成任何内容时执行print语句? 最佳答案 你破坏了生
我刚刚开始了解numpy,我对它声称在其ndarrays中进行内存访问的类似C的效率印象深刻。我想亲自看看这些列表和pythonic列表之间的区别,所以我进行了快速计时测试,在没有它的情况下使用numpy执行了一些相同的简单任务。正如预期的那样,Numpy在数组的分配和算术运算方面优于常规列表一个数量级。但是这段代码在两个测试中都是相同的,对于常规列表花费了大约1/8秒,对于numpy花费了2.5秒多一点:file=open('timing.log','w')fornumina2:ifnum%1000==0:file.write("Multipleof1000!\r\n")file.c
我在示例中使用Python,但我的问题是指一般的编程语言。defsome_function(eggs):ifeggs==1:do_something_1()elifeggs==2:do_something_2()elifeggs==3:do_something_3()else:do_error()returndo_something_4()do_something_5()do_something_6()(这只是一个例子。我的函数不会被称为do_something_x。)像这样在else中放一个return会是一个糟糕的编程习惯吗?放上去会不会更好?do_something_4()do_
我需要创建一个基于dask数据框上某些条件的列。在Pandas中,它相当简单:ddf['TEST_VAR']=['THIS'ifx==200607else'NOTTHIS'ifx==200608else'THAT'ifx==200609else'NONE'forxinddf['shop_week']]虽然在dask我必须做同样的事情如下:deff(x):ifx==200607:y='THIS'elifx==200608:y='THAT'else:y=1returnyddf1=ddf.assign(col1=list(ddf.shop_week.apply(f).compute()))d
使用高阶函数和Lambda会使运行时间和内存效率更好还是更差?例如,将列表中的所有数字相乘:nums=[1,2,3,4,5]prod=1forninnums:prod*=n对比prod2=reduce(lambdax,y:x*y,nums)除了代码行数较少/使用函数式方法外,HOF版本是否比循环版本有任何优势?编辑:我无法将此添加为答案,因为我没有所需的声誉。我按照@DSM的建议使用timeit来分析循环和HOF方法deftest1():s="""nums=[aforainrange(1,1001)]prod=1forninnums:prod*=n"""t=timeit.Timer(s
我想知道是否有一种简单的方法(也许是一个库)可以用Python编写常量时间程序。特别是,我希望能够指定if-else流必须始终在if条件为True或False的同一时间持续。例如:ifcondition:foo1()else:foo2()foo3()constant-time的想法是,在执行中,直到它命中f3()所花费的时间应该与condition。这将防止时间泄漏作为泄露其他信息的旁路(参见timingattacks)。 最佳答案 由于您的问题是关于安全性的,我假设我们可以撇开性能并非常天真地引入最少的时间来花在所有可能的分支上。
我正在尝试学习Python的次要细节,然后我遇到了thetry-elsestatement.try1_stmt::="try"":"suite("except"[expression[("as"|",")target]]":"suite)+["else"":"suite]["finally"":"suite]Theoptionalelseclauseisexecutedifandwhencontrolflowsofftheendofthetryclause.Exceptionsintheelseclausearenothandledbytheprecedingexceptclauses